<?php
session_start();
require_once '../utils/Response.php';
require_once '../config/dbConfig.php';
global $conn;
connectDB();

// 定义图片上传配置
//define('UPLOAD_BASE_URL', 'https://47.122.132.72:3000/uploads/php');
define('UPLOAD_BASE_URL', 'http://localhost:63342/xlsystem/file/uploads');
define('UPLOAD_DIR', '../file/uploads/');

/**
 * 处理图片上传
 * @param array $file 上传的文件信息
 * @return Response 返回处理结果
 */
function handleImageUpload($file) {
    try {
        // 检查文件是否上传成功
        if ($file['error'] !== 0) {
            return Response::error(getUploadErrorMessage($file['error']));
        }

        // 检查是否为图片类型
        $allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
        if (!in_array($file['type'], $allowedTypes)) {
            return Response::error('只支持 JPG、PNG 和 GIF 格式的图片');
        }

        // 检查文件大小（限制为5MB）
        $maxSize = 5 * 1024 * 1024;
        if ($file['size'] > $maxSize) {
            return Response::error('图片大小不能超过5MB');
        }

        // 生成唯一的文件名
        $extension = pathinfo($file['name'], PATHINFO_EXTENSION);
        $filename = uniqid() . '.' . $extension;

        // 移动文件到目标位置
        $targetPath = UPLOAD_DIR . $filename;
        if (!move_uploaded_file($file['tmp_name'], $targetPath)) {
            return Response::error('文件移动失败');
        }

        // 返回成功响应
        return Response::success('图片上传成功', [
            'url' => UPLOAD_BASE_URL . '/' . $filename,
            'filename' => $filename
        ]);

    } catch (Exception $e) {
        return Response::error('图片上传失败：' . $e->getMessage());
    }
}

/**
 * 获取上传错误信息
 * @param int $errorCode 错误代码
 * @return string 错误信息
 */
function getUploadErrorMessage($errorCode) {
    switch ($errorCode) {
        case UPLOAD_ERR_INI_SIZE:
            return '上传的文件超过了php.ini中upload_max_filesize选项限制的值';
        case UPLOAD_ERR_FORM_SIZE:
            return '上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值';
        case UPLOAD_ERR_PARTIAL:
            return '文件只有部分被上传';
        case UPLOAD_ERR_NO_FILE:
            return '没有文件被上传';
        case UPLOAD_ERR_NO_TMP_DIR:
            return '找不到临时文件夹';
        case UPLOAD_ERR_CANT_WRITE:
            return '文件写入失败';
        case UPLOAD_ERR_EXTENSION:
            return '文件上传被PHP扩展程序中断';
        default:
            return '未知上传错误';
    }
}

 // 处理文件上传请求
 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     if (!isset($_FILES['file'])) {
         Response::error('没有接收到上传文件')->send();
         exit;
     }

     // 处理上传并直接发送响应
     handleImageUpload($_FILES['file'])->send();
 }
